import copy
import json
from turtle import position
import scrapy
from shiGuang.items import LuoShanCareItem


class LuoShanSpider(scrapy.Spider):
    name = 'luo-shan'
    allowed_domains = ['luodingshan.cdrmt.com/backer/caselist/index.html']
    # start_urls = ['https://luodingshan.cdrmt.com/backer/caselist/index.html']
    companyId = 'ac10c3794b0242d3b78ea7a1bd16503f'  # 公司id(替换真实值)(不用管)
    userId = 'bc19d1f6b16a4d14b1990914a8c230e1'  # 员工id(替换真实值)(不用管)
    cookie_php = input('输入登录后的cookie(PHPSESSID参数): ') # 登录后的cookie
    cookie = {
        'PHPSESSID': cookie_php
    }
    # 定制化设置
    custom_settings = {
        # 'LOG_LEVEL': 'DEBUG',  # Log等级，默认是最低级别debug
        # 'ROBOTSTXT_OBEY': False,  # default Obey robots.txt rules
        # 'DOWNLOAD_DELAY': 2,  # 下载延时，默认是0
        'COOKIES_ENABLED': True,  # 默认enable，爬取登录后的数据时需要启用。 会增加流量，因为request和response中会多携带cookie的部分
        'COOKIES_DEBUG': True,
        # 默认值为False,如果启用，Scrapy将记录所有在request(Cookie 请求头)发送的cookies及response接收到的cookies(Set-Cookie 接收头)。
        # 'DOWNLOAD_TIMEOUT': 25,  # 下载超时，既可以是爬虫全局统一控制，也可以在具体请求中填入到Request.meta中，Request.meta['download_timeout']
    }
    # 类型
    KeemType = {
        '中式婚礼': 18986,
        '西式婚礼': 18987,
        '新中式婚礼': 18988,
        '汉式婚礼': 18989,
        '户外婚礼': 18990
    }
    # TODO: 初始函数
    def start_requests(self):
        url = 'https://xxxx.com'
        yield scrapy.Request(url=url, cookies=self.cookie, callback=self.parse) # callback: 回调函数进入下一个方法

    # TODO:列表函数
    def parse(self, response):
        if response.status == 200: # 判断页面是否成功
            care_list = response.xpath('//*[@id="main"]/div/div/table//tr') # (解析页面中需要爬取的数据list)
            for care in care_list: # 遍历数据并组装
                if care.xpath('./td[@style]/text()'):
                    di = {'title': care.xpath('./td[@style]/text()').get(),
                          'care_money': care.xpath('./td[5]/text()').get(),
                          'typeId': self.KeemType[care.xpath('./td[6]/text()').get()]}
                    # 详情页地址
                    care_url = 'https://luodingshan.cdrmt.com' + care.xpath('./td[9]/a/@href').get()
                    # 组装数据传递到
                    yield scrapy.Request(url=care_url, cookies=self.cookie, callback=self.care_details,
                                         meta={'di': copy.deepcopy(di)},
                                         dont_filter=True) # callback: 回调函数进入下一个方法  meta: 将列表页组装的数据传递到回调函数

    # TODO:回调函数
    def care_details(self, response):
        if response.status == 200: # 判断页面是否成功
            di = response.meta['di']
            item = LuoShanCareItem() # 使用scrapy生成的itme
            item['companyId'] = self.companyId
            item['userId'] = self.userId
            item['page'] = []
            if response.xpath(
                    '//*[@id="dataForm"]/div[5]/div[2]/div[1]/input/@data-default').get():
                di['cover_url'] = 'https://luodingshan.cdrmt.com' + response.xpath(
                    '//*[@id="dataForm"]/div[5]/div[2]/div[1]/input/@data-default').get()
            if response.xpath(
                    '//*[@id="dataForm"]/div[6]/div[2]/div[1]/input/@data-default').get():
                di['bg_music_url'] = 'https://luodingshan.cdrmt.com' + response.xpath(
                    '//*[@id="dataForm"]/div[6]/div[2]/div[1]/input/@data-default').get()
            if response.xpath(
                    '//*[@id="dataForm"]/div[7]/div[2]/div[1]/input/@data-default').get():
                di['video_url'] = 'https://luodingshan.cdrmt.com' + response.xpath(
                    '//*[@id="dataForm"]/div[7]/div[2]/div[1]/input/@data-default').get()
                di['video_type'] = 1
            images_urls = json.loads(
                response.xpath('//*[@id="dataForm"]/div[8]/div[2]/div[1]/input/@data-default').get())
            di['content'] = []
            for url in images_urls:
                ai = {'type': 'img', 'url': 'https://luodingshan.cdrmt.com' + url}
                di['content'].append(ai)
            di['care_text'] = response.xpath(
                '//*[@class="form-item form-col-12x con-box"]/div[2]/div[1]/textarea/text()').get()
            item['page'].append(di)
            yield item #  将组装的数据传递到pipelines.py中的 LuoShanPipeline

